import BadgeGroup, { UniverTypes } from '@/components/BadgeGroup'

# 部署到 Docker

<BadgeGroup values={[UniverTypes.GENERAL]} value={UniverTypes.GENERAL} />

我们提供了开箱即用的 Docker 部署方式，你可以通过 Docker Compose 快速部署 Univer 的后端服务。

## 配置要求

1. CPU: 1 核
2. 内存: 2G
3. 磁盘: 10G

需要[docker >= 23 版本](https://docs.docker.com/engine/install/)。

## 技术架构

PostgreSQL + RabbitMQ

## 快速部署

系统环境：Linux、Mac、Windows(WSL/Git Bash)

```
sh -c "$(curl -fsSL https://release-univer.oss-cn-shenzhen.aliyuncs.com/release-demo/install.sh)"
```

打开浏览器输入 http://localhost:3010 后会自动创建空白文档并跳转到新文档链接（不支持IE浏览器）。

![例子](./docker/img1.png)

验证协同服务是否启动成功。

请尝试在不同类型浏览器或无痕模式下访问，以全面体验协同功能。

![例子](./docker/img2.png)

## 端口

检查端口是否被占用，若占用请结束其他进程后再尝试启动。

Univer 服务默认端口如下：

| service | port | description |
| --- | --- | --- |
| universer | 8000 | api http server |
| univer-minio | 9000 | s3 server |
| univer-client | 3010 | frontend |


## 常见问题

### windows 系统下启动失败？

运行脚本 `run.sh` 需要 `bash` 环境支持，请使用 Git Bash/MinGW 或 WSL 环境启动。

### 表格另存为功能无法使用？

编辑 `.env` 文件，将 `S3_ENDPOINT_PUBLIC` 配置为你的局域网 IP，才能使`另存为`功能正常。

```diff
- S3_ENDPOINT_PUBLIC=http://univer-minio:19000
+ S3_ENDPOINT_PUBLIC=http://<你的局域网IP>:19000
```

### 拉取 docker hub 镜像失败？

编辑 `docker-compose.yaml`文件，替换对应的镜像地址：
```diff
- image: nginx:alpine-slim
+ image: univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/release/nginx:alpine-slim

- image: postgres:${POSTGRES_VERSION}
+ image: univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/release/postgres:${POSTGRES_VERSION}

- image: rabbitmq:${RABBITMQ_VERSION}
+ image: univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/release/rabbitmq:${RABBITMQ_VERSION}

- image: bitnami/redis:${REDIS_VERSION}
+ image: univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/release/redis:${REDIS_VERSION}

- image: temporalio/auto-setup:${TEMPORAL_VERSION}
+ image: univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/release/temporal:${TEMPORAL_VERSION}

- image: bitnami/minio:${MINIO_VERSION}
+ image: univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/release/minio:${MINIO_VERSION}
```

### 怎么排查服务启动报错？

你可以用 `docker compose logs` 命令查看服务日志，例如：

```shell
# 查看 universer 最近20分钟内的日志
docker compose logs -f universer --since 20m
```

如果你需要帮助，请尽管联系我们。

### 如何重启、停止、卸载服务？

```shell
# 重启
bash run.sh

# 停止
docker compose stop

# 卸载
docker compose down

# 卸载并删除数据
docker compose down --volumes
```

### 怎样修改服务端口？

可以更新 `.env` 文件，然后执行 `bash run.sh` 重启。

```
# host ports
HOST_NGINX_PORT=8000
HOST_MINIO_PORT=19000
HOST_GRAFANA_PORT=13000
```
